import axios from 'axios'
import { Message,MessageBox} from 'element-ui'
import store from '../store'
// console.log('当前环境: ',process.env.NODE_ENV)
//
// /**
//  * 本地开发环境
//  * 可配置后端服务器地址
//  */
// if(process.env.NODE_ENV == 'development'){
//     axios.defaults.baseURL = process.env.VUE_APP_BASE_API + '/admin'
// }
//
// /**
//  * 部署模式
//  * 前端项目部署前的编译，默认是编译到public/dist目录下
//  * 若分开部署，请根据实际情况修改下面的主机地址
//  */
// if(process.env.NODE_ENV == 'production'){
//     axios.defaults.baseURL = window.location.origin + '/admin'
// }

// 后端地址
axios.defaults.baseURL = window.location.origin + '/admin'
console.log('axios.defaults.baseURL:',axios.defaults.baseURL)
//设置超时时间
axios.defaults.timeout = 50000
// post请求头
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'
axios.defaults.withcredentials = true

//请求拦截(请求发出前处理请求)
axios.interceptors.request.use((config) => {
    const token = localStorage.getItem("adminToken")
    if(token){
        config.headers['Authorization'] =  token
    }
    return config;
  }, (error) => {
    return Promise.reject(error);
  });

// 响应拦截器（处理响应数据）
axios.interceptors.response.use(
    (response) => {
        if(process.env.NODE_ENV == 'development'){
            console.log(response)
        }
        const data = response.data
        if(data.status !== 200 && !data.key && !data.code) {
            if (data.status == 101) {
                MessageBox.confirm(data.msg, '系统提示', {
                        showCancelButton: false,
                        confirmButtonText: '重新登录',
                        type: 'warning'
                    }
                ).then(() => {
                    if (location.href.split('#')[1] != '/admin/login') {
                        store.dispatch('logout').then(() => {
                            location.href = '/';
                        })
                    }
                })
            }else{
                var msg = data.msg ? data.msg : '未知错误，请联系系统管理员'
                MessageBox.confirm(msg, '系统提示', {
                        showCancelButton: false,
                        confirmButtonText: '确定',
                        type: 'error'
                    }
                )
            }
            reject(data.msg)
        }
        return response
    },
    (error) => {
        Message({
            showClose: true,
            message: error.message,
            type: 'error',
            duration: 2000
        })
        return Promise.reject(error);
    }
);

// 封装get方法
function get(url, data){
    return new Promise((resolve, reject) =>{
        axios.get(url, data).then(res =>{
            resolve(res.data);
        }).catch(err =>{
            reject(err.data);
        })
    });
}

// 封装post方法
function post(url, params){
    return new Promise((resolve, reject) =>{
        axios.post(url, params).then(res =>{
            resolve(res.data);
        }).catch(err =>{
            reject(err.data);
        })
    });
}

//对外接口
export function request({url,method, data}){
    if(method == 'get'){
        return get(url, data)
    }else if(method == 'post'){
        return post(url, data)
    }
}

export default request
